package com.cx.bank.util;

import java.sql.*;
import java.util.*;

/**
 * 数据库连接工具 提供 获取连接 关闭连接 通用的查询和更新方法
 *
 */
public class DBHelper {
    private static String user = "jdbc:mysql://localhost:3306/banksys?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    private static String userName ="root";
    private static String userPwd = "root";

    /**
     * 获取数据库连接对象
     * @return
     */
    public static Connection getConn() {
        Connection conn = null;
        try {
            // mysql 8.0以后建议用这个
			Class.forName("com.mysql.cj.jdbc.Driver");
//            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(user,userName ,userPwd);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return conn;
    }

    /**
     * 关闭数据库连接对象
     * @param conn
     */
    public static void closeConn(Connection conn) {
        try {
            if(conn!=null) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通用的查询功能 返回资源数据集
     * @param conn
     * @param sql
     * @param params
     * @return
     */
    public static ResultSet queryDate(Connection conn,String sql,List<Object> params) {
        ResultSet rs = null;
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            if(params!=null && params.size()>0) {
                for(int i=0;i<params.size();i++) {
                    ps.setObject((i+1), params.get(i));
                }
            }
            rs = ps.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return rs;
    }

    /**
     * 通用的更新方法 返回布尔值表示是否更新成功！
     * @param conn
     * @param sql
     * @param params
     * @return
     */
    public static boolean updateDate(Connection conn,String sql,List<Object> params) {
        boolean flag = false;
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            if(params!=null && params.size()>0) {
                for(int i=0;i<params.size();i++) {
                    ps.setObject(i+1, params.get(i));
                }
            }
            int e = ps.executeUpdate();
            if(e>0) {
                flag=true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return flag;
    }
}
